package simpleParticleSystemPackage;

import java.util.Random;


/**
* Eine Implementierung des Interface IDirectionCreator. Die Partikel fliegen in
* eine zufaellige Richtung. Die Default-Richtung ist in Richtung der y-Achse.
* Durch die Angabe zweier Winkel - eine Rotation um die z-Achse und anschliessend
* um die y-Achse - kann eine beliebige Richtung erzeugt werden.
*
* @author Frank Klawonn
* Letzte Aenderung 1.08.2008
*
*/
public class RandomDirectionCreator2 implements IDirectionCreator
{

  //Die halbe maximale z-Rotation 
  //Es wird zufaellig um einen Winkel von 0 bis 2*zRot rotiert.
  public double zRot;
  
  //Die halbe maximale y-Rotation
  public double yRot;

  //Die maximale z-Rotation
  //Es wird zufaellig um einen Winkel von -yRot bis yRot rotiert
  public double zRot2;

  //Die maximale y-Rotation
  public double yRot2;

  //Zur Erzeugung der zufaelligen Rotationen
  public Random prng;


  /**
  * Konstruktor
  *
  * @param yAngleHalfRange   Die halbe maximale y-Rotation 
  * @param zAngleHalfRange   Die halbe maximale z-Rotation 
  */
  public RandomDirectionCreator2(double yAngleHalfRange, double zAngleHalfRange)
  {
    zRot = zAngleHalfRange;
    yRot = yAngleHalfRange;
    yRot2 = 2*yRot;
    zRot2 = 2*zRot;

    prng = new Random();
  }


  /**
  * Implementierung der entsprechenden Methode des Interface.
  */
  public double getNextZRotation()
  {
    return(zRot2*prng.nextDouble());
  }


  /**
  * Implementierung der entsprechenden Methode des Interface.
  */
  public double getNextYRotation()
  {
      return(yRot2*prng.nextDouble()-yRot);
  }

}
